package com.william.aggregate;

import lombok.extern.slf4j.Slf4j;

import java.util.List;

/**
 * 计算器工厂类，提供常用的计算器实现
 */
@Slf4j
public class CalculatorFactory {

    /**
     * 获取求和计算器
     * @return 求和计算器实例
     */
    public static ICalculator getSumCalculator() {
        return values -> {
            if (values == null || values.isEmpty()) {
                log.warn("输入数据为空，返回0");
                return 0.0;
            }
            return values.stream()
                    .mapToDouble(Double::doubleValue)
                    .sum();
        };
    }

    /**
     * 获取平均值计算器
     * @return 平均值计算器实例
     */
    public static ICalculator getAvgCalculator() {
        return values -> {
            if (values == null || values.isEmpty()) {
                log.warn("输入数据为空，返回0");
                return 0.0;
            }
            return values.stream()
                    .mapToDouble(Double::doubleValue)
                    .average()
                    .orElse(0.0);
        };
    }
} 